Microsoft Technologies Collection Mapping এবং Component Mapping গাইড ও নোট

316

Fluent NHibernate এর মাধ্যমে Collection Mapping এবং Component Mapping ব্যবহার করে আপনি আপনার ডেটাবেসের সম্পর্কিত ডেটা এবং কমপ্লেক্স অবজেক্টগুলোর জন্য ম্যাপিং তৈরি করতে পারেন। এগুলো প্রোগ্রামিংয়ের ক্ষেত্রে অনেক গুরুত্বপূর্ণ, বিশেষ করে যখন আপনার টেবিলগুলোর মধ্যে একাধিক সম্পর্ক থাকে, যেমন One-to-Many বা Many-to-Many সম্পর্ক অথবা Embedded Types ব্যবহার করা হয়।


Collection Mapping

Collection Mapping হল এমন একটি প্রক্রিয়া যেখানে একাধিক অবজেক্ট বা উপাদান একটি মূল অবজেক্টের সাথে সম্পর্কিত থাকে। এটি সাধারণত One-to-Many বা Many-to-Many সম্পর্কের জন্য ব্যবহৃত হয়। Fluent NHibernate এ, আপনি HasMany, HasManyToMany, HasOne বা ManyToMany মেথড ব্যবহার করে এমন সম্পর্কগুলো তৈরি করতে পারেন।

উদাহরণ

ধরা যাক, আমাদের একটি Department ক্লাস রয়েছে যেখানে একাধিক Employee সম্পর্কিত। এটি একটি One-to-Many সম্পর্ক, যেখানে একটি Department এর মধ্যে একাধিক Employee থাকতে পারে।

Entity ক্লাস:
public class Department
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<Employee> Employees { get; set; }

    public Department()
    {
        Employees = new List<Employee>();
    }
}
Collection Mapping (Fluent NHibernate):
using FluentNHibernate.Mapping;

public class DepartmentMap : ClassMap<Department>
{
    public DepartmentMap()
    {
        Table("Departments");
        
        Id(x => x.Id).GeneratedBy.Identity();
        Map(x => x.Name).Length(100).Not.Nullable();
        
        // Collection mapping (One-to-Many)
        HasMany(x => x.Employees)
            .Cascade.All()    // Cascade all operations (Save, Update, Delete)
            .Inverse()        // Indicates the inverse side of the relationship
            .KeyColumn("DepartmentId");   // Foreign key column in Employee table
    }
}

এখানে:

  • HasMany(x => x.Employees): এটি Department ক্লাসের মধ্যে Employees তালিকাটিকে ম্যাপ করছে। অর্থাৎ, একটি Department এর মধ্যে একাধিক Employee থাকতে পারে।
  • Cascade.All(): এটি নিশ্চিত করে যে যখন Department অবজেক্টে কোনো পরিবর্তন হয়, তখন সংশ্লিষ্ট Employee অবজেক্টগুলোকেও সেই পরিবর্তনটি স্বয়ংক্রিয়ভাবে প্রভাবিত করবে।
  • Inverse(): এটি সংজ্ঞায়িত করে যে Employee টেবিলটি মূল সম্পর্কের (Department) ইনভার্স সাইড।
  • KeyColumn("DepartmentId"): এটি Employee টেবিলের বিদেশী কী DepartmentId কলাম নির্দেশ করে।

Component Mapping

Component Mapping ব্যবহৃত হয় যখন একটি অবজেক্টের মধ্যে অন্য অবজেক্ট থাকে এবং ঐ অবজেক্টটি পুরোপুরি অন্তর্ভুক্ত হয়। এটি সাধারণত Embedded Types বা Value Objects এর জন্য ব্যবহৃত হয়। আপনার যদি এমন একটি সিস্টেম থাকে যেখানে ছোট ছোট অবজেক্টগুলোর একটি গ্রুপ (যেমন ঠিকানা বা যোগাযোগের বিস্তারিত) অন্য একটি অবজেক্টের অংশ হয়, তবে আপনি Component Mapping ব্যবহার করতে পারেন।

উদাহরণ

ধরা যাক, আমাদের একটি Employee ক্লাস রয়েছে, যেখানে Address একটি কম্পোনেন্ট হিসেবে সংযুক্ত।

Address ক্লাস:
public class Address
{
    public virtual string Street { get; set; }
    public virtual string City { get; set; }
    public virtual string ZipCode { get; set; }
}
Employee ক্লাস (যেখানে Address একটি কম্পোনেন্ট):
public class Employee
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual Address Address { get; set; }

    public Employee()
    {
        Address = new Address();
    }
}
Component Mapping (Fluent NHibernate):
using FluentNHibernate.Mapping;

public class EmployeeMap : ClassMap<Employee>
{
    public EmployeeMap()
    {
        Table("Employees");
        
        Id(x => x.Id).GeneratedBy.Identity();
        Map(x => x.Name).Length(100).Not.Nullable();
        
        // Component mapping (embedding Address as part of Employee)
        Component(x => x.Address, m =>
        {
            m.Map(x => x.Street).Length(200);
            m.Map(x => x.City).Length(100);
            m.Map(x => x.ZipCode).Length(20);
        });
    }
}

এখানে:

  • Component(x => x.Address, m => {...}): এটি Employee ক্লাসের মধ্যে Address কে একটি কম্পোনেন্ট হিসেবে ম্যাপ করছে। এইভাবে, Address ক্লাসের ফিল্ডগুলি ডেটাবেসের কলামে ম্যাপ হয় এবং আলাদা একটি টেবিল হিসেবে তৈরি হয় না। সব তথ্য Employee টেবিলেই সংরক্ষিত হবে।
  • m.Map(x => x.Street).Length(200): এটি Address এর Street ফিল্ডের জন্য কলাম ম্যাপিং তৈরি করছে, যেখানে এর দৈর্ঘ্য ২০০ হবে।

Collection এবং Component Mapping এর মধ্যে পার্থক্য

  • Collection Mapping মূলত ব্যবহার করা হয় একাধিক অবজেক্টের জন্য, যেমন One-to-Many বা Many-to-Many সম্পর্ক। এটি আলাদা টেবিলের মধ্যে সম্পর্ক তৈরি করে এবং সাধারণত একটি বিদেশী কী (Foreign Key) ব্যবহার করে।
  • Component Mapping মূলত ছোট অবজেক্ট বা মানগুলোর জন্য ব্যবহৃত হয়, যেগুলি অন্য একটি অবজেক্টের অংশ হিসেবে সংযুক্ত থাকে। এটি আলাদা টেবিল তৈরি না করে মূল টেবিলের মধ্যে সংযুক্ত থাকে এবং একটি নতুন টেবিল তৈরি হয় না।

এভাবে, Fluent NHibernate এর মাধ্যমে Collection Mapping এবং Component Mapping ব্যবহার করে আপনি ডেটাবেসের মধ্যে সম্পর্কিত ডেটা ও কমপ্লেক্স অবজেক্টগুলোর ম্যাপিং সহজেই করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...